#ifndef EXPRESSION_H
#define EXPRESSION_H

#include <vector>
#include <string>
#include <map>
#include "test.h"

class evaluation;

class expression
{
    friend class evaluation;
public:
    expression(
        int expr_id,
        const char *op_name,
        const char *op_type,
        int *inputs,
        int num_inputs);

    void add_op_param_double(
        const char *key,
        double value);

    void add_op_param_ndarray(
        const char *key,
        int dim,
        size_t shape[],
        double data[]);private:

private:
    int expr_id_temp;
    std::string op_name_temp;
    std::string op_type_temp;
    std::vector<int> inputs_temp;
    std::map<std::string, test> exp_value;
    std::map<std::string, int> exp_ker_str;
    test temp;
}; // class expression

#endif // EXPRESSION_H
